package respsa;

import agente.Agente;
import agente.MemElem;
import ambiente.Accao;
import ambiente.Coordenada;
import espest.Operador;
import espest.Transicao;

public class OperadorConcreto extends Operador<EstadoPosicao>{

	private Accao accao;
	private MemElem crencas;
	
	public OperadorConcreto(Accao accao, MemElem crencas){
		this.accao = accao;
		this.crencas = crencas;
	}
	
	@Override
	public Transicao<EstadoPosicao> transitar(EstadoPosicao estado) {
		Coordenada coord = Agente.simular(crencas, estado.getInfo(), accao, crencas.getAgente().isCarga());
		if(coord!=null){
			EstadoPosicao estSuc = new EstadoPosicao(coord);
			return new Transicao<EstadoPosicao>(estado, estSuc, this, estado.getInfo().dist(estSuc.getInfo()));
		}
		else
			return null;
	}
	
	public Accao getAccao(){
		return accao;
	}
	

}
